﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/*
 场景题 2：日志记录系统
 场景描述：
     你的应用程序需要一个日志记录系统，用于记录应用程序运行时的日志。为了确保所有日志信息都集中在一个地方，并且避免创建多个日志实例，你决定使用单例模式实现日志记录系统。
 练习要求：
     实现一个单例模式的日志记录器类。
     提供方法来记录信息、警告和错误日志。
     确保日志记录器类在整个应用程序中只有一个实例。
 */
namespace CS_BEGINNER_TO_PROFICIENT.DesignPatterns.CreationMode.SingletonPattern.Practice
{
    public class Logger
    {
        private static readonly Lazy<Logger> _instance = new Lazy<Logger>(() => new Logger());
        private readonly string _logFilePath;

        private Logger() 
        {
            _logFilePath = @"./../../DesignPatterns/CreationMode/SingletonPattern/Practice/application.log";
        }

        public static Logger Instance => _instance.Value;

        private void Log(string message, string logType)
        {
            using (var writer = new StreamWriter(_logFilePath, true))
            {
                writer.WriteLine($"{DateTime.Now} [{logType}] {message}");
            }
        }

        public void LogInfo(string message) 
        {
            Log(message, "INFO");
        }

        public void LogWarning(string message)
        {
            Log(message, "WARNING");
        }

        public void LogError(string message)
        {
            Log(message, "ERROR");
        }
    }
}
